查看原文
其他

Spring Boot 2.4 正式发布,重大调整!!!

The following article is from Java技术栈 Author 栈长

戳这里,加关注哦~


大家周末愉快啊,Spring Boot 2.3.5 没发布几天,你看,还是 1 周前发布的:

昨天又有粉丝留言说 Spring Boot 2.4.0 已经发布了:

我了个去,栈长赶紧跑到 Spring Boot 官网看了下,果然 2.4.0 了,我顿时傻眼了,又得写文章了,看来我消息还是稍微有点滞后了…

Spring Boot 2.4.0 这么快就发布了,又是周末来给大家推送,我印象中都是周末推……

Spring Boot 更新也太快了,很多同学表示学不来了,学不动了。学不动也要学啊,不然就要被淘汰了,Java技术栈所有 Spring Boot 教程和示例源码都上传到 Github 了,欢迎 Star:

https://github.com/javastacks/spring-boot-best-practice

好吧,还是例行公事,接下来栈长带大家来解读下 Spring Boot 2.4.0 到底更新了什么鬼?

切记!!!

这个版本不要轻易升级!!!

下面注意仔细看完哦。。。

一、支持 Java 15

Spring Boot 2.4.0 支持 Java 15 了,同时向下兼容 Java 11 和 Java 8。

二、依赖升级

Spring Boot 2.4.0 升级了一些主要的 Spring 项目:

  • Spring AMQP 2.3
  • Spring Batch 4.3
  • Spring Data 2020.0
  • Spring Framework 5.3
  • Spring HATEOAS 1.2
  • Spring Integration 5.4
  • Spring Kafka 2.6
  • Spring Retry 1.3
  • Spring Security 5.4
  • Spring Session 2020.0

另外,还尽可能升级了一些第三方库到最新稳定版本:

  • Artemis 2.13
  • AssertJ 3.18
  • Cassandra Driver 4.7
  • Elasticsearch 7.9
  • Flyway 7
  • Jersey 2.31
  • JUnit 5.7
  • Liquibase 3.10
  • Lettuce 6.0
  • Micrometer 1.6
  • Mockito 3.4
  • MongoDB 4.1
  • Oracle Database 19.7
  • Reactor 2020.0
  • RSocket 1.1
  • Undertow 2.2
  • ……

三、配置改进

1、改进配置文件的处理方式

Spring Boot 2.4 改进了处理 application.properties 和 application.yml 配置文件的方式。更新后的逻辑旨在简化和合理化外部配置的加载方式,但有些参数的组合形式却得到了限制,升级请谨慎。

如果你的应用工程只有一个简单的 application.properties 或 application.yml 文件,则可以进行无缝升级到 Spring Boot 2.4.0。

但是,如果你的配置较为复杂,比如说有指定 profile 的参数,或者有基于 profile 激活的参数,要使用新功能就需要进行一些更改。

更多细节可参考:

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-Config-Data-Migration-Guide

如果你想继续使用 Spring Boot 2.3 的配置逻辑,也可以通过在 application.properties 或者 application.yml 配置文件中添加以下参数:

spring.config.use-legacy-processing = true

2、导入配置参数改进

通过配置参数 spring.config.location 和 spring.config.import 来指定或者导入配置文件时,如果配置文件不存在,现在不是只能默默地失败了,可以通过添加 optional: 前缀来标识它是可选的。

比如我们从 /etc/config/application.properties 指定配置文件,如果这个文件不存在,系统就会跳过它。

spring.config.location=optional:/etc/config/application.properties

如果你想将所有指定的配置文件都默认为可选的,可以通过 SpringApplication.setDefaultProperties(…) 来设置

spring.config.on-location-not-found=ignore 这个参数,或者将它设置在系统环境变量中。

3、支持导入配置树

新版本的 spring.config.import 属性还可以用于导入配置树,通过与 Kubernetes 一起使用,配置树是提供键/值对的另一种方法,每一个键值/对都在其自己的文件中声明,文件名是键,文件内容就是值。

另外,从配置树导入的参数默认会带一个换行符。

详细的参考:

https://docs.spring.io/spring-boot/docs/2.4.0/reference/html/spring-boot-features.html#boot-features-external-config-files-configtree

具体的配置上的细节暂时没有时间详细研究了,后面有机会再详细介绍一篇,关注公众号Java技术栈第一时间推送。

四、新增启动端点

Spring Boot 2.4.0 添加了一个新的启动端点,用来显示应用启动有关的详细信息,比如可以帮助我们来诊断启动时间比预期更长的 Spring Beans。

这个功能建立在 Spring Framwork 5.3 最近添加的应用程序启动跟踪特性的基础上,感兴趣的可以在 Spring 框架文档中阅读有关该功能的更多信息。

https://docs.spring.io/spring-framework/docs/5.3.x/reference/html/core.html#context-functionality-startup

五、新增起源链(Origin Chains)

Origin 接口更新了,使用了全新的 getParent() 方法,这样就可以提供完整的参数起源链,以准确显示某一项参数的来源。

比如你在 application.properties 配置文件中使用 spring.config.import 来导入第二个配置文件的参数,从第二个配置文件加载的参数的 Origin 将具有一个指向原始导入声明的父级。

说白了就是可以看到参数从哪里导进来的,可以通过 actuator/env 或者 actuator/configprops 端点来查看与之相关的输出信息,这里暂不详细研究了,后面有机会再详细介绍一篇,关注公众号Java技术栈第一时间推送。

六、Docker 支持升级

1、镜像发布

Spring Boot Maven 插件的 spring-boot:build-image 指令和 Gradle 插件的 bootBuildImage 任务现在可以直接发布 Docker 镜像到 Docker 注册中心了。

2、授权机制

当使用 Spring Boot 构建时,可以为构建器或者运行镜像使用私有授权的 Docker 私有注册中心,支持用户名/密码认证以及基于 Token 机制认证。

更多详细的配置可以参考对应的插件文档:

Maven:

https://docs.spring.io/spring-boot/docs/2.4.0/maven-plugin/reference/htmlsingle/#build-image-example-publish

Gradle:

https://docs.spring.io/spring-boot/docs/2.4.0/gradle-plugin/reference/htmlsingle/#build-image-example-publish

七、移除了 JUnit 5’s Vintage 引擎

Spring Boot 2.4.0 从 spring-boot-starter-test 中移除了 JUnit 5  Vintage 引擎,JUnit 5 可以通过 vintage 引擎来运行 JUnit 4 编写的测试用例,说白了就是兼容 JUnit 4 呗。

如果你不想迁移测试用例到 JUnit 5 而继续使用 JUnit 4,添加以下 Maven 依赖即可:

<dependency>
    <groupId>org.junit.vintage</groupId>
    <artifactId>junit-vintage-engine</artifactId>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>org.hamcrest</groupId>
            <artifactId>hamcrest-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>

以下为对应的 Gradle 配置:

testImplementation("org.junit.vintage:junit-vintage-engine") {
    exclude group: "org.hamcrest", module: "hamcrest-core"
}

八、其他更新

Spring Boot 2.4.0 发布更新说明中还包括了许多其他的更新和改进,比如说在 Spring Boot 2.4.0 中标识了在下个版本中计划废弃的不推荐使用的类和方法等。

以上就是 Spring Boot 2.4.0 的主要变更内容,当然还有许多发布细节,感兴趣的可以研究下这个更新说明:

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.4-Release-Notes

总结

终于写完了,又肝了一个晚上!!

可以看出 Spring Boot 2.4.0 的变更还是蛮大的,特别是在配置文件、配置参数的处理,还有许多框架的重大版本升级。

切记不要轻易升级到这个版本,如需升级,最好是详细看清楚变更内容,做好充分测试,以免年终奖没了。。

关于更多的细节暂时没时间深入研究了,后续栈长有时间再深入研究下,或者关注公众号Java核心技术第一时间推送。



好了,如果你还没用过 Spring Boot,今天我就送你一份 Spring Boot 学习笔记,包括底层实现原理及代码实战,非常齐全,助你快速打通 Spring Boot 的各个环节。

详细目录如下:
1 Spring boot helloworld 
2 Spring boot 返回 json 数据
3 Spring boot 使用其他 json 转换框架
4 Spring boot 全局异常捕捉 
5 Spring boot JPA 连接数据库 
6 Spring boot 配置 JPA 
7 Spring boot 整合 JPA 保存数据 
8 Spring boot 使用 JdbcTemplate 保存数据 
9 Spring boot 常用配置 
10 Spring boot 静态资源处理 
11 Srping boot 实现任务调度 
12 Spring boot 普通类调用 Bean 
13 spring boot 使用模板引擎
14 Spring boot 集成 JSP 
15 Spring boot 集成 servlet 
16 Spring boot 集成 Fliter 和 Linstener 
17 Spring boot 拦截器 HandlerInterceptor  
18 Spring boot 系统启动任务 CommandLineRunner  
19 Spring boot 集成 Junit 单元测试 
20 Spring boot 读取系统环境变量  
21 Spring boot 使用自定义 properties 
22 Spring boot 改变默认包扫描
23 Spring boot 自定义启动 Banner
24 Spring boot 导入 spring XML 配置文件  
25 Spring boot 热部署
26 Spring boot 监控和管理生产环境
27 Spring boot starter 详解
28 Spring boot 依赖的版本
29 Spring boot 文件上传
30 Spring boot 集成 redis 缓存
31 Spring boot 之 spring cache
32 Spring boot 集成 EHCache
33 Spring boot 分布式 Session 共享
...
共 108 页!非常齐全!

获取方式:
我当时就是看这个教程学习 Spring Boot 的,现在这份教程免费分享给大家。
和作者小白成为好友吧,可以无套路免费获取,后面我还会在朋友圈分享更多福利,坑位不多,快来和我成为好友吧。

备注:888,可快速通过哦
只剩最后不到 500 个好友坑位…

版权申明:本文系公众号 "Java技术栈" 原创,原创实属不易,转载、引用本文内容请注明出处,禁止抄袭、洗稿,请自重,尊重他人劳动成果和知识产权。

最后给大家送下福利,大家可以关注Java核心技术公众号,在后台回复 “福利”可以获取一份我整理的最新Java面试题资料。

最近好文分享

1、300 行代码带你秒懂 Java 多线程!

2、while(true)和for(;;)哪个更快?!

3、JDK 1.8 竟然打破了我对接口的一切认知。

4、终于有人把 HashMap 说清楚了!

5、Class.forName和ClassLoader有区别?

6、排名前 16 的 Java 工具类!

……

更多请扫码关注 • Java核心技术

一个分享Java核心技术干货的公众号


点击阅读原文获取面试题~

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存